# generator函数的调用返回一个generator对象
L = [x * x for x in range(10)]
print(L)
g = (x * x for x in range(10))
print(next(g))
print(next(g))
print(next(g))
for n in g:
    print(n)


def foo():
    print("starting...")
    while True:
        res = yield 4  # 程序停止，并没有执行赋值给res
        print("res:", res)


g = foo()
print(next(g))
print("*" * 20)
print(next(g))  # 从刚才那个next程序停止的地方开始执行的，也就是要执行res的赋值操作,所以这个时候res赋值是None,所以接着下面的输出就是res:None
# 带yield的函数是一个生成器，而不是一个函数了，这个生成器有一个函数就是next函数，next就相当于“下一步”生成哪个数，
# 这一次的next开始的地方是接着上一次的next停止的地方执行的，所以调用next的时候，生成器并不会从foo函数的开始执行，
# 只是接着上一步停止的地方开始，然后遇到yield后，return出要生成的数，此步就结束。
